#include "ChatWindow.h"

ChatWindow::ChatWindow(QWidget *parent)
    : QWidget{parent}
{
    // 设置窗口标题
    setWindowTitle("霹雳霹雳会员购客服端");

    // 设置固定窗口大小
    const int WIDTH = 1280; // 宽度
    const int HEIGHT = 720; // 高度
    setFixedSize(WIDTH, HEIGHT);

    // 设置窗口不可调整大小
    setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
    setWindowFlags(windowFlags() & ~Qt::WindowMinimizeButtonHint);
    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);

    // 初始化UI组件
    initUI();
}

ChatWindow::~ChatWindow()
{
    m_hboxLayout->deleteLater();
    m_contactList->deleteLater();
    m_vboxLayout->deleteLater();
    m_chatMessages->deleteLater();
    m_messageInput->deleteLater();
    m_sendButton->deleteLater();
    m_inputLayout->deleteLater();
    m_chatArea->deleteLater();
}

void ChatWindow::initUI()
{
    // 创建水平布局
    m_hboxLayout = new QHBoxLayout(this);

    // 创建联系人列表
    m_contactList = new QListWidget(this);
    m_contactList->setMinimumWidth(280); // 设置左侧最小宽度
    m_contactList->setViewMode(QListView::ListMode);
    m_contactList->setIconSize(QSize(48, 48));
    m_contactList->setSpacing(1);
    m_hboxLayout->addWidget(m_contactList, 1); // 添加到布局中，权重为1

    // 创建聊天窗口
    m_vboxLayout = new QVBoxLayout;

    // 创建上部（聊天消息窗口）
    m_chatMessages = new QListWidget(this);
    m_chatMessages->setMinimumHeight(500); // 上部高度
    m_chatMessages->setSpacing(1);
    m_vboxLayout->addWidget(m_chatMessages, 3); // 权重为3

    // 创建下部（消息输入区））
    m_inputLayout = new QHBoxLayout;
    m_messageInput = new QTextEdit(this);
    m_messageInput->setMaximumHeight(100); // 设置最大高度
    m_messageInput->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    m_sendButton = new QPushButton("发送", this);
    m_sendButton->setMaximumHeight(100); // 设置最大高度
    m_sendButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    m_inputLayout->addWidget(m_messageInput, 3); // 输入框权重为3
    m_inputLayout->addWidget(m_sendButton, 1);   // 按钮权重为1
    m_vboxLayout->addLayout(m_inputLayout, 1);   // 整个输入区权重为1

    // 将聊天窗口添加到主布局
    m_chatArea = new QWidget(this);
    m_chatArea->setLayout(m_vboxLayout);
    m_hboxLayout->addWidget(m_chatArea, 3); // 添加到主布局中，权重为3

    // 设置布局
    setLayout(m_hboxLayout);

    // 添加测试用联系人
    addTestContacts();

    // 初始化当前联系人ID
    m_currentContactId = 1;

    // 默认加载第一个用户的聊天记录
    loadChatHistoryForContact(m_currentContactId);

    // 连接发送按钮
    connect(m_sendButton, &QPushButton::clicked, this, &ChatWindow::sendMessage);
}

void ChatWindow::sendMessage()
{
    // 获取输入框中的文本
    QString messageText = m_messageInput->toPlainText();
    if (!messageText.isEmpty())
    {
        // 创建一条新的消息
        Message newMessage(Message::Sent, messageText);

        // 添加到聊天消息列表
        addMessageToChat(newMessage);

        // 清空输入框
        m_messageInput->clear();
    }
}

void ChatWindow::addMessageToChat(const Message &message)
{

    // QListWidget *m_chatMessages = new QListWidget(this);

    // 创建消息项
    MessageItem *messageItem = new MessageItem(message, m_chatMessages);

    // 创建列表项
    QListWidgetItem *listItem = new QListWidgetItem(m_chatMessages);
    listItem->setSizeHint(messageItem->sizeHint());
    m_chatMessages->setItemWidget(listItem, messageItem);

    // 滚动到底部
    m_chatMessages->scrollToBottom();
}

void ChatWindow::addTestContacts()
{
    qDebug() << "Current working directory:" << QDir::currentPath();

    // 测试数据
    // 使用相对路径加载图片
    QPixmap avatar1("./user_avatar/0.png");
    QPixmap avatar2("./user_avatar/1.png");

    if (avatar1.isNull())
    {
        qDebug() << "Failed to load avatar1.png";
    }
    if (avatar2.isNull())
    {
        qDebug() << "Failed to load avatar2.png";
    }

    Contact c1(1, "Alice", avatar1);
    Contact c2(2, "Bob", avatar2);

    // 创建自定义的联系人列表项
    ContactItem *item1 = new ContactItem(c1, this);
    ContactItem *item2 = new ContactItem(c2, this);

    // 创建列表项
    QListWidgetItem *listItem1 = new QListWidgetItem(m_contactList);
    listItem1->setSizeHint(item1->sizeHint());
    m_contactList->setItemWidget(listItem1, item1);

    QListWidgetItem *listItem2 = new QListWidgetItem(m_contactList);
    listItem2->setSizeHint(item2->sizeHint());
    m_contactList->setItemWidget(listItem2, item2);

    // 连接联系人列表的选择变化信号到槽函数
    connect(m_contactList, &QListWidget::itemClicked, this, &ChatWindow::onContactSelected);
}

void ChatWindow::onContactSelected(QListWidgetItem *item)
{
    // 找到关联的ContactItem
    ContactItem *contactItem = static_cast<ContactItem *>(m_contactList->itemWidget(item));

    // 更新当前联系人ID
    m_currentContactId = contactItem->getContactId();

    // 清除之前的聊天记录
    m_chatMessages->clear();

    // 加载并显示新的聊天记录
    loadChatHistoryForContact(m_currentContactId);
}

void ChatWindow::loadChatHistoryForContact(int contactId)
{
    // 示例：加载一些测试消息
    addMessageToChat(Message(Message::Received, "你好，今天感觉怎么样？"));
    addMessageToChat(Message(Message::Sent, "我很好，谢谢。你呢？"));
}
